package com.example.demo.classLoader;


import com.google.common.collect.Sets;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;

public class ClassTest {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        //不会执行静态代码块、静态方法、静态常量，因为是类加载器缓存
        /*Class<?> aClass = ClassTest.class.getClassLoader().loadClass("com.example.demo.classLoader.User");
        User user = (User) aClass.newInstance();
        System.out.println(Class.forName("com.example.demo.classLoader.User"));*/
        oomTest();
        System.gc();
        System.out.println(list.toString());
    }

    static List list = new ArrayList<>();

    public static void oomTest() {
        Object object = new Object();
        list.add(object);
    }


    /**
     * 使用随机算法产生一个数，要求把1-1000W之间这些数全部生成。
     * （考察高效率，解决产生冲突的问题）
     */
    static void testRandom() {
        int value = 100;
        //int类型最大值：2的32次方 - 1 = Integer.MAX_VALUE = 2147483647，二十亿多,真够啦 。
        Set<Integer> result = Sets.newHashSetWithExpectedSize(value);
        Random random = new Random();
        long a = System.currentTimeMillis();
        int count = 0;
        while (result.size() < value + 1) {
            int i = random.nextInt(value + 1);
            result.add(i);
            count++;
        }
        System.out.println("\r<br> 执行耗时 : " + (System.currentTimeMillis() - a) / 1000f + " 秒 ");
        System.out.println("完了，集合大小为" + result.size());
        System.out.println("循环了" + count + "次");

    }
}
